package 微服务.SpringCloud_1.统一网关Gateway_5.概述;

/**
 * 统一网关Gateway
 */
public class index {
    /**
     * 为什么需要网关<p>
     * 我们现在的微服务结构是：<p>
     * 我们有很多服务，每个服务都需要去操作数据库完成自己的业务<p>
     * 每个微服务又可以在Nacos中完成服务的注册发现、配置的管理<p>
     * 当服务之间有相互调用时，我们就可以利用Feign这样一个组件去做<p>
     * 当外部需要访问微服务时，我们可以让Feign直接发送请求到服务<p></p>
     * <p>
     * 现在就出现了一个问题：<p>
     * 我们的所有服务直接暴露在外，任何人都可以访问。这是存在安全隐患的<p>
     * 例如有的服务是内部人员、管理人员才能使用的<p>
     * 这时候我们就需要对访问者进行身份校验<p>
     * 之前单体架构时，我们都是直接用Jwt令牌技术来实现的<p>
     * 而现在由于服务的增多，我们不能在每个服务中都写校验逻辑<p>
     * 这样会导致代码重复度增加<p>
     * 并且校验会需要密钥，我们不能把密钥分发给每个微服务，否则会有密钥泄露的风险<p>
     * 而现在，我们可以统一对所有请求进行拦截，然后统一校验之后在让请求到达微服务<p>
     * 这个功能就是由<a href="">网关</a>来实现的<p>
     * 一切请求必须先到网关，再到微服务<p>
     * 这就是 <a href="">网关功能之一：身份认证、权限校验</a><p></p>
     * <p>
     * 当请求来了之后，在网关处校验通过，就要放行到微服务<p>
     * 这时候又出现了一个问题：<p>
     * 网关本身是不能处理业务的，所以网关就需要将请求转发到需要的微服务（需要根据请求来判断并转发到微服务）<p>
     * 并且微服务可能有多个实例，还要处理访问哪个实例的问题<p>
     * 这就是<a href="">网关功能之二：服务路由、负载均衡</a><p></p>
     * <p>
     * 除了上面的，还存在一个需要解决的问题：<p>
     * 由于微服务不能容许海量的请求同一时段进入，所以必须限制请求的数量（流量）<p>
     * 这就是<a href="">网关功能之三：请求限流</a><p></p>
     * <p>
     * Spring Cloud实现网关的方式：<p>
     * 在Spring Cloud中，提供了两个组件，都可以实现网关的功能：<p>
     * 1、gateway<p>
     * 2、zuul<p>
     * zuul是基于Servlet的实现，属于阻塞式编程<p>
     * 而gateway是基于Spring5中提供的WebFlux的实现，属于响应式编程，具备更好的性能，吞吐能力更强<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
